package com.uzai.console.service.feign;

import com.uzai.common.msg.MsgDto;
import com.uzai.console.common.UzaiRespVo;
import com.uzai.console.dto.feign.config.ClearDeviceCacheDto;
import com.uzai.console.dto.feign.titok.TiktokGetConversDto;
import com.uzai.console.dto.rocketmq.androidapp.AndroidSetConfigDto;
import com.uzai.console.dto.rocketmq.androidapp.UpdateAndroidAppDto;
import com.uzai.console.dto.rocketmq.pyqfollow.FollowConfigDto;
import com.uzai.console.dto.rocketmq.wxgroup.*;
import com.uzai.console.service.feign.impl.UzaiImClientFeignFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 悠聊
 * @Auther: liuqi
 * @Date: 2021/11/24 16:22
 * @Description:
 */
@Component
@FeignClient(value = "uzai-im-client", fallbackFactory = UzaiImClientFeignFallbackFactory.class)
public interface UzaiImClientFeignService {

    /**
     * 朋友圈自动跟发
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/pyq/follow")
    UzaiRespVo<Boolean> pyqFollow(@RequestBody MsgDto<FollowConfigDto> msgDto);


    /**
     * 安卓APP版本更新接口
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/android/app/update")
    UzaiRespVo<Object> androidAppUpdate(@RequestBody MsgDto<UpdateAndroidAppDto> msgDto);

    /**
     * 安卓版配置推送接口
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/android/setconfig/push")
    UzaiRespVo<Object> androidSetConfigPush(@RequestBody MsgDto<AndroidSetConfigDto> msgDto);

    /**
     * 清除移动端设备缓存
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/clear/device/cache")
    UzaiRespVo<Object> cleanDeviceCache(@RequestBody MsgDto<ClearDeviceCacheDto> msgDto);

    /**
     * 刷新抖音群
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/tiktok/get/conversation")
    UzaiRespVo<Object> reflashTiktokConversation(@RequestBody MsgDto<TiktokGetConversDto> msgDto);

    /**
     * 开启/关闭禁止修改群名
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/prohibit/setgroupname")
    UzaiRespVo<Object> workwxProhibitSetgroupname(@RequestBody MsgDto<WorkWxProhibitSetGroupName> msgDto);

    /**
     * 添加群成员为联系人
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/add/groupmember/tofriends")
    UzaiRespVo<Object> workwxAddGroupmemberTofriends(@RequestBody MsgDto<WorkWxAddGroupMemberToFriends> msgDto);

    /**
     * 解散群
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/dismiss/group")
    UzaiRespVo<Object> workwxDismissGroup(@RequestBody MsgDto<WorkWxDismissGroup> msgDto);

    /**
     * 获取群黑名单
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/getgroup/blacklist")
    UzaiRespVo<Object> workwxGetGroupBlacklist(@RequestBody MsgDto<WorkWxGetGroupBlackList> msgDto);

    /**
     * 设置群黑名单
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/setgroup/membertoblacklist")
    UzaiRespVo<Object> workwxSetgroupMembertoblacklist(@RequestBody MsgDto<WorkWxSetGroupMemberToBlackList> msgDto);

    /**
     * 获取群二维码
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/getgroup/qrcode")
    UzaiRespVo<Object> workwxGetGroupQrcode(@RequestBody MsgDto<WorkWxGetGroupQrCode> msgDto);

    /**
     * 获取群欢迎语列表
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/getgroup/welcomemsg/list")
    UzaiRespVo<Object> workwxGetGroupWelcomemsgList(@RequestBody MsgDto<WorkWxGetGroupWelcomeMsgList> msgDto);

    /**
     * 添加群欢迎语
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/addgroup/welcomemsg")
    UzaiRespVo<Object> workwxAddgroupWelcomemsg(@RequestBody MsgDto<WorkWxAddGroupWelcomeMsg> msgDto);


    /**
     * 设置群欢迎语
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/setgroup/welcomemsg")
    UzaiRespVo<Object> workwxSetgroupWelcomemsg(@RequestBody MsgDto<WorkWxSetGroupWelcomeMsg> msgDto);

    /**
     * 获取群防骚扰规则
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/get/antispamrule")
    UzaiRespVo<Object> workwxGetAntispamrule(@RequestBody MsgDto<Object> msgDto);

    /**
     * 设置防骚扰规则
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/set/antispamrule")
    UzaiRespVo<Object> workwxSetAntispamrule(@RequestBody MsgDto<WorkWxSetAntiSpamRule> msgDto);

    /**
     * 开启-关闭群邀请确认
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/setgroup/inviteconfirm")
    UzaiRespVo<Object> workwxSetgroupInviteconfirm(@RequestBody MsgDto<WorkWxSetGroupInviteConfirm> msgDto);

    /**
     * 设置群管理员
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/setgroup/manager")
    UzaiRespVo<Object> workwxSetgroupManager(@RequestBody MsgDto<WorkWxSetGroupManager> msgDto);

    /**
     * 修改企业微信群名称
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/set/group/name")
    UzaiRespVo<Object> setGroupName(@RequestBody MsgDto<UpdateNicknameDto> msgDto);

    /**
     * 创建群聊
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/create/group")
    UzaiRespVo<Object> createGroup(@RequestBody MsgDto<CreateWxworkGroupDto> msgDto);

    /**
     * 邀请入群
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/invite/join/group")
    UzaiRespVo<Object> inviteJoinGroup(@RequestBody MsgDto<InviteWxworkGroupDto> msgDto);

    /**
     * 发送公告
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/send/group/notice")
    UzaiRespVo<Object> sendGroupNotice(@RequestBody MsgDto<SendGroupNoticeDto> msgDto);

    /**
     * 企业微信群内添加好友
     * @author jitwxs
     * @date 2021/11/29 10:25
     * @param msgDto
     * @return com.uzai.console.common.UzaiRespVo<java.lang.String>
     */
    @PostMapping("/workwx/add/groupmember/tofriends")
    UzaiRespVo<Object> wxworkAddGroupmemberTofriends(@RequestBody MsgDto<AddFriendReqWxworkDto> msgDto);

}
